/*  
    ajax函数 执行 ajax请求

    @param  string url 发送请求的url地址
    @param  string type 发送请求的请求类型 默认值是 get 
    @param  string data 发送请求携带的参数 默认值是 '' 空字符串
    @param  function cb 请求结束 执行的回调函数 默认值是 空函数

    通过输入对应的参数执行 ajax 请求 
    回调函数必须要有一个形参 存储 ajax请求的获取的响应结果 
*/

function myAjax(url, type = 'get', data = '', cb = function () { }) {
    // 1 创建 ajax 对象
    let xhr = {};
    if (XMLHttpRequest) {
        //  标准浏览器
        xhr = new XMLHttpRequest();
    } else {
        // 兼容IE低版本
        xhr = new ActiveXObject('Microsoft.XMLHTTP');
    }

    // 2 根据请求方式 get / post 设定请求程序
    if (type.toLowerCase() === 'get') {
        // 设定get方式的 open 和 send
        xhr.open('get', `${url}?${data}`);
        xhr.send()
    } else if (type.toLowerCase() === 'post') {
        // 设定post方式的 open 和 请求头设定 和 send
        xhr.open('post', url);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.send(data);
    }

    // 3 如果ajax请求执行结束 并且 ajax请求执行成功 执行回调函数
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4 && (xhr.status >= 200 && xhr.status <= 299)) {
            // 回调函数的参数是 响应体内容
            cb(xhr.response);
        }
    }
}


/*
    promise封装 调用 jQuery的ajax
*/

function myPromiseAjax( url , type = 'get' , data = {} , dataType = 'text' , jsonp ){
    const p = new Promise(function(f,r){
        $.ajax({
            url: url, 
            type: type,
            data: data,
            dataType: dataType,
            jsonp : jsonp,
            success: function(res){
                f(res);
            }, 
            error: function(){
                r();
            }, 
        })
    })

    return p ;
}